﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using CRMBussines;

/// <summary>
/// Catalogos Geograficos
/// Por Víctor Ceja
/// </summary>
public partial class CatalogoGeografico : System.Web.UI.Page
{
    private static AppSettingsReader settings = new AppSettingsReader();
    string cadena = (string)settings.GetValue("Conexion2", typeof(string));
    private static int idC = 0;

    enum eCatalogoGeograficos
    {
        Ciudades = 0, Municipios = 1, Estados = 2
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.IsPostBack == false)
        {
            cargaCatalogosGeograficios();
            CuandoInicias(false);
        }
    }

    #region CargaCatalogos

    private object cargaRegistro(int id, eCatalogoGeograficos catalogo)
    {
        object reg = new object();
        using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
        {
            switch (catalogo)
            {
                case eCatalogoGeograficos.Ciudades:
                    reg = c.ObtenCiudad(id);
                    break;
                case eCatalogoGeograficos.Municipios:
                    reg = c.ObtenMunicipio(id);
                    break;
                case eCatalogoGeograficos.Estados:
                    reg = c.ObtenEstado(id);
                    break;
                default:
                    break;
            }
        }

        return reg;
    }

    private void cargaCiudades()
    {
        using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
        {
            grdDatos.DataSource = c.ObtenCiudades();
            grdDatos.DataBind();
        }
    }

    private void cargaMunicipios()
    {
        using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
        {
            grdDatos1.DataSource = c.ObtenMunicipios();
            grdDatos1.DataBind();
        }
    }

    private void cargaEstados()
    {
        using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
        {
            grdDatos2.DataSource = c.ObtenEstados();
            grdDatos2.DataBind();
        }
    }

    private void cargaCatalogosGeograficios()
    {
        cargaCiudades();
        cargaMunicipios();
        cargaEstados();
    }

    #endregion

    #region EventosUI

    protected void grdDatos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grdDatos.PageIndex = e.NewPageIndex;
        cargaCiudades();
    }
    protected void grdDatos_SelectedIndexChanged1(object sender, EventArgs e)
    {
        idC = int.Parse(grdDatos.SelectedValue.ToString());
        CiudadPai ciudad = (CiudadPai)cargaRegistro(int.Parse(grdDatos.SelectedValue.ToString()), eCatalogoGeograficos.Ciudades);
        txtNombreCiudad.Text = ciudad.Nombre;
        lnkEliminarCiudad.Enabled = true;
    }
    protected void grdDatos1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grdDatos1.PageIndex = e.NewPageIndex;
        cargaMunicipios();
    }
    protected void grdDatos1_SelectedIndexChanged1(object sender, EventArgs e)
    {
        idC = int.Parse(grdDatos1.SelectedValue.ToString());
        MunicipioPai mun = (MunicipioPai)cargaRegistro(int.Parse(grdDatos1.SelectedValue.ToString()), eCatalogoGeograficos.Municipios);
        txtNombreMunicipio.Text = mun.Nombre;
        lnkNEliminarMunicipio.Enabled = true;
    }
    protected void grdDatos2_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grdDatos2.PageIndex = e.NewPageIndex;
        cargaEstados();
    }
    protected void grdDatos2_SelectedIndexChanged1(object sender, EventArgs e)
    {
        idC = int.Parse(grdDatos2.SelectedValue.ToString());
        EstadoPai est = (EstadoPai)cargaRegistro(int.Parse(grdDatos2.SelectedValue.ToString()), eCatalogoGeograficos.Estados);
        txtNombreEstado.Text = est.Nombre;
        lnkEliminarEstado.Enabled = true;
    }
    protected void lnkNuevoCiudad_Click(object sender, EventArgs e)
    {
        LimpiaCiudad();
        SoloLecturaCiudad(false);
        lnkGuardarCiudad.Enabled = true;
        idC = 0;
        txtNombreCiudad.Focus();
    }
    protected void lnkEliminarCiudad_Click(object sender, EventArgs e)
    {
        if (idC != 0)
        {
            using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
            {
                c.EliminaCiudad(idC);
            }
            cargaCiudades();
            idC = 0;
            LimpiaCiudad();
            lnkEliminarCiudad.Enabled = false;

        }
    }
    protected void lnkEditarCiudad_Click(object sender, EventArgs e)
    {
        SoloLecturaCiudad(false);
        lnkGuardarCiudad.Enabled = true;
        txtNombreCiudad.Focus();
    }
    protected void lnkGuardarCiudad_Click(object sender, EventArgs e)
    {
        using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
        {
            if (idC == 0)
                c.GuardaCiudad(ObtenCiudad());
            else
            {
                CiudadPai cit = ObtenCiudad();
                cit.CiudadPaisId = idC;
                c.ActualizaCiudad(cit);
            }
        }
        cargaCiudades();
        SoloLecturaCiudad(true);
        idC = 0;
        lnkGuardarCiudad.Enabled = false;        
    }
    protected void lnkNuevoMunicipio_Click(object sender, EventArgs e)
    {
        LimpiaMunicipio();
        SoloLecturaMunicipio(false);
        lnkGuardarMunicipio.Enabled = true;
        idC = 0;
        txtNombreMunicipio.Focus();
    }
    protected void lnkNEliminarMunicipio_Click(object sender, EventArgs e)
    {
        if (idC != 0)
        {
            using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
            {
                c.EliminaMunicipio(idC);
            }
            cargaMunicipios();
            idC = 0;
            LimpiaMunicipio();
            lnkNEliminarMunicipio.Enabled = false;

        }
    }
    protected void lnkEditarMunicipio_Click(object sender, EventArgs e)
    {
        SoloLecturaMunicipio(false);
        lnkGuardarMunicipio.Enabled = true;
        txtNombreMunicipio.Focus();
    }
    protected void lnkGuardarMunicipio_Click(object sender, EventArgs e)
    {
        using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
        {
            if (idC == 0)
                c.GuardaMunicipio(ObtenMunicipio());
            else
            {
                MunicipioPai cit = ObtenMunicipio();
                cit.MunicipioPaisId = idC;
                c.ActualizaMunicipio(cit);
            }
        }
        cargaMunicipios();
        SoloLecturaMunicipio(true);
        idC = 0;
        lnkGuardarMunicipio.Enabled = false;  
    }
    protected void lnkNuevoEstado_Click(object sender, EventArgs e)
    {
        LimpiaEstado();
        SoloLecturaEstado(false);
        lnkGuardarEstado.Enabled = true;
        idC = 0;
        txtNombreEstado.Focus();
    }
    protected void lnkEliminarEstado_Click(object sender, EventArgs e)
    {
        if (idC != 0)
        {
            using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
            {
                c.EliminaEstado(idC);
            }
            cargaEstados();
            idC = 0;
            LimpiaEstado();
            lnkEliminarEstado.Enabled = false;

        }
    }
    protected void lnkEditarEstado_Click(object sender, EventArgs e)
    {
        SoloLecturaEstado(false);
        lnkGuardarEstado.Enabled = true;
        txtNombreEstado.Focus();
    }
    protected void lnkGuardarEstado_Click(object sender, EventArgs e)
    {
        using (CrmBussines c = new CrmBussines(cadena, CRMGenerales.Firmado))
        {
            if (idC == 0)
                c.GuardaEstado(ObtenEstado());
            else
            {
                EstadoPai cit = ObtenEstado();
                cit.EstadoPaisId = idC;
                c.ActualizaEstado(cit);
            }
        }
        cargaEstados();
        SoloLecturaEstado(true);
        idC = 0;
        lnkGuardarEstado.Enabled = false;  
    }

    #endregion

    #region Eventos

    #region LimpiaCajas

    private void LimpiaCiudad()
    {
        txtNombreCiudad.Text = string.Empty;
    }

    private void LimpiaMunicipio()
    {
        txtNombreMunicipio.Text = string.Empty;
    }

    private void LimpiaEstado()
    {
        txtNombreEstado.Text = string.Empty;
    }

    #endregion

    #region ObtenDatos

    private CiudadPai ObtenCiudad()
    {
        CiudadPai ci = new CiudadPai();
        ci.Nombre = txtNombreCiudad.Text;
        return ci;
    }

    private MunicipioPai ObtenMunicipio()
    {
        MunicipioPai mu = new MunicipioPai();
        mu.Nombre = txtNombreMunicipio.Text;
        return mu;
    }

    private EstadoPai ObtenEstado()
    {
        EstadoPai es = new EstadoPai();
        es.Nombre = txtNombreEstado.Text;
        return es;
    }

    #endregion

    #region SoloLectura

    private void SoloLecturaCiudad(bool valor)
    {
        txtNombreCiudad.ReadOnly = valor;
    }

    private void SoloLecturaMunicipio(bool valor)
    {
        txtNombreMunicipio.ReadOnly = valor;
    }

    private void SoloLecturaEstado(bool valor)
    {
        txtNombreEstado.ReadOnly = valor;
    }

    #endregion

    private void CuandoInicias(bool valor)
    {
        lnkGuardarCiudad.Enabled = valor;
        lnkGuardarMunicipio.Enabled = valor;
        lnkGuardarEstado.Enabled = valor;


        lnkEliminarCiudad.Enabled = valor;
        lnkNEliminarMunicipio.Enabled = valor;
        lnkEliminarEstado.Enabled = valor;

    }

    #endregion
}